4.3 Conjuntos (set)
1️⃣ ¿Qué es un conjunto?
Un conjunto (set) en Python es una colección desordenada, mutable y que no admite elementos duplicados. Su funcionamiento es similar al de los conjuntos en matemáticas: permite realizar operaciones de unión, intersección, diferencia y comprobación de pertenencia de forma muy eficiente.
colores = {"rojo", "azul", "verde", "rojo"}
print(colores)
# {'rojo', 'azul', 'verde'}
Aunque se escribió "rojo" dos veces, el conjunto solo lo guarda una vez.
Esto ocurre porque los conjuntos eliminan automáticamente los duplicados.
2️⃣ Características de los conjuntos
Los conjuntos tienen varias propiedades que los diferencian de listas y tuplas:
| Propiedad | Descripción |
|---|---|
| Desordenado | No conserva el orden de inserción (los elementos pueden aparecer en cualquier orden). |
| Sin duplicados | Cada valor solo puede aparecer una vez. |
| Mutable | Se pueden añadir o eliminar elementos después de crearse. |
| No indexado | No se puede acceder a los elementos por su posición (no existen índices). |
Estas características hacen que los conjuntos sean ideales cuando se necesita almacenar colecciones sin repeticiones o realizar operaciones matemáticas de comparación entre grupos.
3️⃣ Cómo crear un conjunto
🟩 Usando llaves {}
La forma más común es escribir los elementos entre llaves y separados por comas.
animales = {"perro", "gato", "loro"}
print(animales)
# {"perro", "gato", "loro"}
🟦 Con la función set()
También se puede crear un conjunto a partir de otro tipo de colección (lista, tupla, cadena…).
letras = set("abracadabra")
print(letras)
#{'r', 'a', 'b', 'c', 'd'}
Cada letra aparece solo una vez. El conjunto elimina los duplicados automáticamente.
🟨 Conjuntos vacíos
Para crear un conjunto vacío, no se pueden usar llaves ({}) porque Python lo interpreta como un diccionario.
Debe usarse la función set().
vacio = set()
4️⃣ Operaciones con conjuntos
🟪 Añadir y eliminar elementos
| Método | Descripción | Ejemplo | Resultado |
|---|---|---|---|
add(x) | Añade un elemento al conjunto. | numeros.add(10) | Inserta 10. |
update(iterable) | Añade varios elementos a la vez. | numeros.update([20,30]) | Inserta 20 y 30. |
remove(x) | Elimina un elemento (error si no existe). | numeros.remove(20) | Borra 20. |
discard(x) | Elimina un elemento sin error si no existe. | numeros.discard(50) | No genera error. |
pop() | Elimina y devuelve un elemento aleatorio. | elemento = numeros.pop() | Quita un valor cualquiera. |
clear() | Vacía el conjunto. | numeros.clear() | Conjunto vacío {}. |
numeros = {1, 2, 3}
numeros.add(4)
numeros.discard(2)
print(numeros)
# {1, 3, 4} (El orden de los elmentos puede variar)
5️⃣ Operaciones matemáticas entre conjuntos
Python permite realizar operaciones matemáticas con conjuntos de forma muy natural. Estas operaciones devuelven un nuevo conjunto con el resultado.
🟩 Unión (|)
Une los elementos de dos conjuntos, eliminando duplicados.
A = {1, 2, 3}
B = {3, 4, 5}
print(A | B)
# {1, 2, 3, 4, 5}
El método union() puede sustituir al operador '|'
🟦 Intersección (&)
Devuelve los elementos comunes a ambos conjuntos.
print(A & B)
# {3}
El método intersection() puede sustituir al operador '&'
🟨 Diferencia (-)
Devuelve los elementos que están en el primero, pero no en el segundo.
print(A - B)
# {1, 2}
El método difference() puede sustituir al operador '-'
🟧 Diferencia simétrica (^)
Devuelve los elementos que están en uno u otro, pero no en ambos.
print(A ^ B)
# {1, 2, 4, 5}
El método symmetric_difference() puede sustituir al operador '^'
6️⃣ Comparacion entre conjuntos
Python permite comparar conjuntos utilizando operadores relacionales, igual que en matemáticas.
| Operador | Significado | Ejemplo | Resultado |
|---|---|---|---|
== | Igualdad | {1,2} == {2,1} | True |
!= | Diferente | {1,2} != {3,4} | True |
< | Subconjunto propio | {1,2} < {1,2,3} | True |
<= | Subconjunto (incluido) | {1,2} <= {1,2} | True |
> | Superconjunto propio | {1,2,3} > {1,2} | True |
>= | Superconjunto (incluido) | {1,2} >= {1,2} | True |
A = {1, 2, 3}
B = {2, 3}
print(B < A) # True
7️⃣ Iteración de conjuntos
Aunque los conjuntos no tienen un orden fijo, sí se pueden recorrer con un bucle for:
frutas = {"manzana", "pera", "naranja"}
for fruta in frutas:
print(fruta)
El orden puede variar en cada ejecución. Sin embargo, todos los elementos se recorren exactamente una vez.
8️⃣ Copias y conversiones
Se pueden copiar o convertir conjuntos fácilmente.
A = {1, 2, 3}
B = A.copy()
print(B)
También se pueden transformar en listas o tuplas:
lista = list(A)
tupla = tuple(A)
Estas conversiones son útiles cuando se necesita acceder a los elementos por posición o mostrarlos ordenados.
9️⃣ Conjuntos inmutables: frozenset
Además del tipo set, Python incluye otro tipo de conjunto llamado frozenset, que es inmutable.
Es decir, una vez creado, no se pueden añadir ni eliminar elementos.
Sin embargo, sí permite realizar todas las operaciones matemáticas (unión, intersección, etc.) devolviendo nuevos conjuntos.
A = frozenset({1, 2, 3})
B = frozenset({3, 4, 5})
print(A | B) # Unión
print(A & B) # Intersección
# frozenset({1, 2, 3, 4, 5})
# frozenset({3})
frozenset se comporta como un conjunto normal, pero no admite modificaciones.
Los frozenset pueden ser útiles cuando queremos usar un set pero se requiere que el tipo sea inmutable. Algo no muy común, pero que podría darse, es crear un set de sets. Es decir, un ser que contiene como elementos a otros sets. El siguiente código daría un TypeError ya que los elementos de un set deben ser por definición inmutables.
s1 = {1, 2}
s2 = {3, 4}
#s3 = {s1, s2} # Error! TypeError
Para resolver este problema, podemos crear un set de frozensets. Esto si es posible ya que el frozenset es un tipo inmutable.
s1 = frozenset([1, 2])
s2 = frozenset([3, 4])
s3 = {s1, s2}
print(s3) #{frozenset({3, 4}), frozenset({1, 2})}
Otra de sus principales ventajas es que puede usarse como clave en un diccionario o como elemento de otro conjunto, ya que es inmutable.
📊 Tabla resumen
| Característica | set | frozenset |
|---|---|---|
| Ordenado | ❌ No | ❌ No |
| Duplicados | ❌ No | ❌ No |
| Mutable | ✅ Sí | ❌ No |
| Indexado | ❌ No | ❌ No |
| Permite operaciones matemáticas | ✅ Sí | ✅ Sí |
| Métodos principales | add, remove, discard, union, intersection, difference, clear, copy | Igual, excepto los que modifican |
| Uso típico | Colecciones dinámicas sin repeticiones | Conjuntos fijos o como claves en diccionarios |